package com.example.demo.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.Result;
import com.example.demo.entity.House;
import com.example.demo.mapper.HouseMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController //定义一个返回json数据的controller
@RequestMapping("/house")    //接口统一的路由
@Slf4j
public class HouseController {

    @Autowired
    HouseMapper houseMapper;

    /**
     * 新增房屋
     * @return
     */
    @PostMapping
    public Result<?> save(@RequestBody House house){//@RequestBody将前台传过来的数据转换成对像    Result<?>  ?表示所有泛型

        houseMapper.insert(house);
        return Result.success();
    }

    /**
     * 数据展示 ,这里使用的是分页查询，在分页查询之前需要在项目中添加MybatisPlus的分页插件
     * @param pageNum   当前页
     * @param pageSize  每页条数
     * @param search    模糊查询的关键字
     * @return
     */
    @GetMapping
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search){
//        new Page<>(pageNum, pageSize);
        //条件查询，并分页
        LambdaQueryWrapper<House> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StrUtil.isNotBlank(search),House::getName,search);

//        Page<House> housePage = houseMapper.selectPage(new Page<>(pageNum, pageSize), Wrappers.<House>lambdaQuery().eq(House::getHousename, search));//模糊查询
        Page<House> housePage = houseMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);

        return Result.success(housePage);
    }

    /**
     * 更新方法
     * @param house
     * @return
     */
    @PutMapping
    public Result<?> update(@RequestBody House house){//@RequestBody将前台传过来的数据转换成对像    Result<?>  ?表示所有泛型
//        System.out.println("更新："+house);
        houseMapper.updateById(house);
        LambdaQueryWrapper<House> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(House::getId,house.getId());
        House selectOne = houseMapper.selectOne(wrapper);
        System.out.println("测试，所获得修改后的house："+selectOne);
        return Result.success(selectOne);
    }

    @DeleteMapping("/{id}")
    public Result<?> delete(@PathVariable Long id){//@RequestBody将前台传过来的数据转换成对像    Result<?>  ?表示所有泛型
        houseMapper.deleteById(id);
        return Result.success();
    }
}
